/**  
 * Map对象，实现Map功能  主要用于存储tabs中抽样结果是否保存
 *   
 *   
 * size() 获取Map元素个数   
 * isEmpty() 判断Map是否为空   
 * clear() 删除Map所有元素   
 * put(key, value) 向Map中增加元素（key, value)   
 * remove(key) 删除指定key的元素，成功返回true，失败返回false   
 * get(key) 获取指定key的元素值value，失败返回null   
 * element(index) 获取指定索引的元素（使用element.key，element.value获取key和value），失败返回null   
 * containsKey(key) 判断Map中是否含有指定key的元素   
 * containsValue(value) 判断Map中是否含有指定value的元素   
 * keys() 获取Map中所有key的数组（array）   
 * values() 获取Map中所有value的数组（array）  
 */  
function Map() {   
    this.elements = new Array();   
  
    // 获取Map元素个数   
    this.size = function() {   
        return this.elements.length;   
    },   
  
    // 判断Map是否为空   
    this.isEmpty = function() {   
        return (this.elements.length < 1);   
    },   
  
    // 删除Map所有元素   
    this.clear = function() {   
        this.elements = new Array();   
    },   
  
    // 向Map中增加元素（key, value)   
    this.put = function(_key, _value) {   
        if (this.containsKey(_key) == true) {   
            if (this.containsValue(_value)) {   
                if (this.remove(_key) == true) {   
                    this.elements.push( {   
                        key : _key,   
                        value : _value   
                    });   
                }   
            } else {   
                this.elements.push( {   
                    key : _key,   
                    value : _value   
                });   
            }   
        } else {   
            this.elements.push( {   
                key : _key,   
                value : _value   
            });   
        }   
    },   
  
    // 删除指定key的元素，成功返回true，失败返回false   
    this.remove = function(_key) {   
        var bln = false;   
        try {   
            for (i = 0; i < this.elements.length; i++) {   
                if (this.elements[i].key == _key) {   
                    this.elements.splice(i, 1);   
                    return true;   
                }   
            }   
        } catch (e) {   
            bln = false;   
        }   
        return bln;   
    },   
  
    // 获取指定key的元素值value，失败返回null   
    this.get = function(_key) {   
        try {   
            for (i = 0; i < this.elements.length; i++) {   
                if (this.elements[i].key == _key) {   
                    return this.elements[i].value;   
                }   
            }   
        } catch (e) {   
            return null;   
        }   
    },   
  
    // 获取指定索引的元素（使用element.key，element.value获取key和value），失败返回null   
    this.element = function(_index) {   
        if (_index < 0 || _index >= this.elements.length) {   
            return null;   
        }   
        return this.elements[_index];   
    },   
  
    // 判断Map中是否含有指定key的元素   
    this.containsKey = function(_key) {   
        var bln = false;   
        try {   
            for (i = 0; i < this.elements.length; i++) {   
                if (this.elements[i].key == _key) {   
                    bln = true;   
                }   
            }   
        } catch (e) {   
            bln = false;   
        }   
        return bln;   
    },   
  
    // 判断Map中是否含有指定value的元素   
    this.containsValue = function(_value) {   
        var bln = false;   
        try {   
            for (i = 0; i < this.elements.length; i++) {   
                if (this.elements[i].value == _value) {   
                    bln = true;   
                }   
            }   
        } catch (e) {   
            bln = false;   
        }   
        return bln;   
    },   
  
    // 获取Map中所有key的数组（array）   
    this.keys = function() {   
        var arr = new Array();   
        for (i = 0; i < this.elements.length; i++) {   
            arr.push(this.elements[i].key);   
        }   
        return arr;   
    },   
  
    // 获取Map中所有value的数组（array）   
    this.values = function() {   
        var arr = new Array();   
        for (i = 0; i < this.elements.length; i++) {   
            arr.push(this.elements[i].value);   
        }   
        return arr;   
    };   
}  
